class BinaryHeap():
    def __init__(self):
        self.heapList = [0]
        self.currentSize = 0

    def insert(self, k):
        self.heapList.append(k)
        self.currentSize += 1
        self.percUp(self.currentSize)

    def percUp(self, i):
        while i // 2 > 0:
            if self.heapList[i] < self.heapList[i//2]:
                self.heapList[i], self.heapList[i//2] = self.heapList[i//2], self.heapList[i]
            i = i // 2

    def delMin(self):
        retval = self.heapList[1]
        self.heapList[1] = self.heapList[self.currentSize]
        self.heapList.pop()
        self.currentSize -= 1
        self.percDown(1)
        return retval

    def percDown(self, i):
        while i*2 <= self.currentSize:
            mc = self.minChild(i)
            if self.heapList[i] > self.heapList[mc]:
                self.heapList[i], self.heapList[mc] = self.heapList[mc], self.heapList[i]
            i = mc

    def minChild(self, i):
        if 2*i + 1 > self.currentSize:
            return 2*i
        if self.heapList[2*i] < self.heapList[2*i + 1]:
            return 2*i
        else:
            return 2*i + 1

    def isEmpty(self):
        return self.currentSize == 0

    def size(self):
        return self.currentSize

    def buildHeap(self, alist):
        i = len(alist) // 2
        self.currentSize = len(alist)
        self.healList = [0] + alist[:]
        while (i > 0):
            self.percDown(i)
            i = i - 1



